#include"rq.hpp"
#include<iostream>
#include<unistd.h>

void* Product(void* args)
{
    RingQueue<int>* rq = static_cast<RingQueue<int>*>(args);
    int i = 0;
    while(true)
    {
        rq->EQueue(i++);
        std::cout << "生产了一个数据" << std::endl;
    }
    return nullptr;
}

void* Comsume(void* args)
{
    RingQueue<int>* rq = static_cast<RingQueue<int>*>(args);
    while(true)
    {
        sleep(1);
        int data = 0;
        rq->PQueue(&data);
        std::cout << "消费了一个数据" << data << std::endl;
    }
    return nullptr;
}

int main()
{
    pthread_t p[3];
    pthread_t c[2];
    RingQueue<int>* rq = new RingQueue<int>;

    pthread_create(p,nullptr,Product,rq);
    pthread_create(p+1,nullptr,Product,rq);
    pthread_create(p+2,nullptr,Product,rq);
    pthread_create(c,nullptr,Comsume,rq);
    pthread_create(c+1,nullptr,Comsume,rq);
    
    pthread_join(p[0],nullptr);
    pthread_join(p[1],nullptr);
    pthread_join(p[2],nullptr);
    pthread_join(c[1],nullptr);
    pthread_join(c[2],nullptr);

    delete rq;
    
    return 0;
}